import java.io.*;
import java.text.SimpleDateFormat;
import java.util.*;

public class TimeZoneConversion
{
	public static void main(String[] args) throws Exception {
		TimeZoneConversion d = new TimeZoneConversion();
		d.test1();
	}

	private void test1(){
		Calendar cal1 = Calendar.getInstance(TimeZone.getTimeZone("GMT"));
		System.out.println(cal1.getTime());
		cal1.set(2001, 7, 1, 0, 0, 0);
		System.out.println(cal1.getTime());
		System.out.println(cal1.get(Calendar.MONTH));
		System.out.println(cal1.get(Calendar.DATE));
		System.out.println(cal1.get(Calendar.HOUR_OF_DAY));
		System.out.println(cal1.getTimeZone().getID());
		
		cal1.setTimeZone(TimeZone.getTimeZone("GMT"));
		// 如果取消下面代码的注释，结果就和前面的一样
		// int save = cal1.get(Calendar.MILLISECOND);
//		cal1.set(Calendar.MILLISECOND, 0);
		System.out.println(cal1.getTime());
		System.out.println(cal1.getTimeZone().getID());
		System.out.println(cal1.get(Calendar.MONTH));
		System.out.println(cal1.get(Calendar.DATE));
		System.out.println(cal1.get(Calendar.HOUR_OF_DAY));		
	}
	private void test2() {
		TimeZone.setDefault(TimeZone.getTimeZone("Asia/Shanghai"));
		Calendar cal1 = Calendar.getInstance();
		cal1.set(2001, 7, 1, 0, 0, 0);
		System.out.println(cal1.getTime());
		// 在当前的时区下，我们指定了时间是 8 月，显示 7
		System.out.println(cal1.get(Calendar.MONTH));
		// 在当前的时区下，我们指定了时间是 1 日，显示 1
		System.out.println(cal1.get(Calendar.DATE));
		// 在当前的时区下，我们指定了时间是 0 时，显示 0
		System.out.println(cal1.get(Calendar.HOUR_OF_DAY));
		System.out.println(cal1.getTimeZone().getID());
		cal1.setTimeZone(TimeZone.getTimeZone("GMT"));
		System.out.println(cal1.getTime());
		System.out.println(cal1.getTimeZone().getID());
		// 由于实际保存的时间没有修改，在 GMT 下，由于时差，显示 6 （7月）
		System.out.println(cal1.get(Calendar.MONTH));
		// 在 GMT 下，由于时差，显示 31
		System.out.println(cal1.get(Calendar.DATE));
		// 由于更改了时区，在 GMT 下时间就会变成 16，8个小时时差
		System.out.println(cal1.get(Calendar.HOUR_OF_DAY));
	}
	
	private void test3(){
	    Date epoch = new Date();
		SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH");
		simpleDateFormat.setTimeZone(TimeZone.getTimeZone("GMT")); // do all date formatting in GMT
		String r0 = simpleDateFormat.format(epoch);
	}
}